package models;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.IdClass;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedNativeQueries;
import javax.persistence.NamedNativeQuery;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import javax.persistence.Transient;

/**
 * Asocia materia, curso y profesor
 * 
 * @author yeisson, camilo
 * 
 */
@Entity
@Table(name = "materia_curso")
@IdClass(MateriaCursoId.class)
@NamedQueries({ @NamedQuery(name = MateriaCurso.ASIGNATURAS_PROFESOR, query = "SELECT mc,m,c FROM MateriaCurso mc, Curso c, Materia m WHERE c.id=mc.idCurso AND m.id=mc.idMateria AND c.idCalendarioAcademico=:idCalendarioAcademico AND mc.profesor.id=:idProfesor"), })
@NamedNativeQueries({ @NamedNativeQuery(name = MateriaCurso.ASIGNATURAS_CURSO, query = "SELECT mg.id_materia, ?idCurso, mc.id_profesor, per.nombres, per.apellidos FROM materia_grado mg LEFT JOIN materia_curso mc	ON mg.id_materia=mc.id_materia AND mc.id_curso=?idCurso	LEFT JOIN profesor p ON p.id=mc.id_profesor	LEFT JOIN persona per ON per.id=p.id_persona, curso c WHERE c.id_grado=mg.id_grado AND c.id=?idCurso") })
public class MateriaCurso extends models.Entity<MateriaCursoId> {

	public static final String ASIGNATURAS_PROFESOR = "getAsignaturasProfesor";
	public static final String ASIGNATURAS_CURSO = "getMateriasCurso";
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	@Id
	@Column(name = "id_materia")
	private Long idMateria;
	@Id
	@Column(name = "id_curso")
	private Long idCurso;

	@JoinColumn(name = "id_profesor")
	@ManyToOne
	private Profesor profesor;

	@Transient
	private Materia materia;

	@Transient
	private Curso curso;

	public MateriaCurso() {

	}

	public Profesor getProfesor() {
		return profesor;
	}

	public void setProfesor(Profesor profesor) {
		this.profesor = profesor;
	}

	@Override
	public MateriaCursoId getId() {

		return new MateriaCursoId(getIdMateria(), getIdCurso());
	}

	@Override
	public void setId(MateriaCursoId id) {

		setIdMateria(id.getIdMateria());
		setIdCurso(id.getIdCurso());
	}

	public Long getIdCurso() {
		return idCurso;
	}

	public void setIdCurso(Long idCurso) {
		this.idCurso = idCurso;
	}

	public Long getIdMateria() {
		return idMateria;
	}

	public void setIdMateria(Long idMateria) {
		this.idMateria = idMateria;
	}

	public Materia getMateria() {
		return materia;
	}

	public void setMateria(Materia materia) {
		this.materia = materia;
	}

	public Curso getCurso() {
		return curso;
	}

	public void setCurso(Curso curso) {
		this.curso = curso;
	}

}
